package p5.MasterMindApp;

import org.omg.CORBA.*;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.POA;
import java.util.*;
import java.io.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
public class MasterMindServer {
	public static void main(String args[]) {
		try {
//			crear e inicializar ORB
			ORB orb = ORB.init(args, null);
			
//			crear un objeto remoto
			MasterMindImpl impl;
			if(args.length == 0){
				impl = new MasterMindImpl(gen_aleat());
			} else impl = new MasterMindImpl(args[0]);
			
//			obtener referencia rootpoa y activar el POAManager
			POA rootpoa = POAHelper.narrow(orb
					.resolve_initial_references("RootPOA"));
			rootpoa.the_POAManager().activate();
//			obtener una referencia al objeto remoto
			org.omg.CORBA.Object ref = rootpoa.servant_to_reference(impl);
			MasterMind href = MasterMindHelper.narrow(ref);
//			las siguientes lineas me permiten publicar un obj remoto
			org.omg.CORBA.Object objRef = orb
			.resolve_initial_references("NameService");
			NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
//			nombre con el cual voy a publicar mi objeto
			String nombre = "MasterMind";
			NameComponent path[] = ncRef.to_name(nombre);
//			publicar el objeto
			ncRef.rebind(path, href);
//			ejecutar el orb
			orb.run();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private static String gen_aleat() {
		String lletres = "QWERTYUIOPASDFGHJKLZXCVBNM";
		String aleat = "";
		for(int i = 0; i< 5; i++){
			aleat += lletres.charAt((int)Math.floor(Math.random()*lletres.length()));
		}
		return aleat;
	}
}